Introdução ao ggplot2

Aula 22 - ggplot2

ggplot2

  • ggplot2 é um pacote poderoso para criar visualizações em R.
  • Baseado no livro “ggplot2: Elegant Graphics for Data Analysis” de Hadley Wickham.
  • Componentes principais de um gráfico:
    • Data
    • Aesthetics
    • Geometry

1. Dados

  • Dados são a base para qualquer gráfico.
  • Vamos usar o conjunto de dados nycflights13
  • O pacote nycflights13 contém informações sobre todos os voos que partiram de Nova York em 2013.
# Carregando os pacotes necessários
library(ggplot2)
library(nycflights13)

# Visualizando os primeiros registros do dataset flights
head(flights)
# A tibble: 6 × 19
   year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
  <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
1  2013     1     1      517            515         2      830            819
2  2013     1     1      533            529         4      850            830
3  2013     1     1      542            540         2      923            850
4  2013     1     1      544            545        -1     1004           1022
5  2013     1     1      554            600        -6      812            837
6  2013     1     1      554            558        -4      740            728
# ℹ 11 more variables: arr_delay <dbl>, carrier <chr>, flight <int>,
#   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>,
#   hour <dbl>, minute <dbl>, time_hour <dttm>

2. Aesthetics

  • Estética define como os dados são mapeados para os atributos visuais.
  • Usamos aes() para mapear variáveis para estética.
  • Exemplos de atributos visuais: cor, forma, tamanho, etc.
# Criando um gráfico básico
ggplot(data = flights, aes(x = dep_delay, y = arr_delay)) +
  geom_point()

3. Geometria

  • Geometria é o que determina o tipo de gráfico (pontos, linhas, barras, etc).
  • Usamos funções geom_* para especificar a geometria.
  • Exemplos de geometrias: geom_point(), geom_line(), geom_bar(), etc.
  • Podemos adicionar mais de uma geometria ao gráfico.
# Adicionando mais detalhes ao gráfico
ggplot(data = flights, aes(x = dep_delay, y = arr_delay)) +
  geom_point() +
  geom_smooth(method = "lm")

Exemplo Completo 1

  • Vamos criar um gráfico completo com título e labels.
ggplot(data = flights, aes(x = dep_delay, y = arr_delay)) +
  geom_point() +
  geom_smooth(method = "lm") +
  labs(title = "Atraso na Partida vs Atraso na Chegada",
       x = "Atraso na Partida (minutos)",
       y = "Atraso na Chegada (minutos)")

Exemplo Completo 2

  • Adicionando cor, tamanho e forma ao gráfico.
flights |>
  ggplot(aes(x = dep_delay, y = arr_delay, color = carrier, size = distance, shape = origin)) +
  geom_point() +
  labs(title = "Atraso na Partida vs Atraso na Chegada com Detalhes",
       x = "Atraso na Partida (minutos)",
       y = "Atraso na Chegada (minutos)")

Exemplo Completo 3

  • E se esse fosse um gráfico que estivéssemos fazendo uma pesquisa, um trabalho ou um relatório?
# Custom color palette
custom_colors <- c("AA" = "#1b9e77", "AS" = "#d95f02", "B6" = "#7570b3", 
                   "DL" = "#e7298a", "EV" = "#66a61e", "F9" = "#e6ab02", 
                   "FL" = "#a6761d", "HA" = "#666666", "MQ" = "#1b9e77", 
                   "OO" = "#d95f02", "UA" = "#7570b3", "US" = "#e7298a", 
                   "VX" = "#66a61e", "WN" = "#e6ab02", "YV" = "#a6761d")

# Improved ggplot
flights |>
  filter(!is.na(dep_delay), !is.na(arr_delay)) |>
  filter(dep_delay > 0) |> 
  group_by(carrier, origin) |> 
  summarize(avg_dep_delay = mean(dep_delay),
            avg_arr_delay = mean(arr_delay),
            total_flights = n()) |>
  filter(total_flights > 600) |> 
  ggplot(aes(x = avg_dep_delay, y = avg_arr_delay, color = carrier, size = total_flights)) +
  geom_point(alpha = 0.6) +
  scale_color_manual(values = custom_colors) +
  labs(title = "Atraso na Partida vs Atraso na Chegada com Detalhes",
       subtitle = "Comparação entre companhias aéreas e origem dos voos",
       x = "Atraso na Partida (minutos)",
       y = "Atraso na Chegada (minutos)",
       color = "Companhia Aérea",
       size = "Total de voos",
       shape = "Origem") +
  theme_minimal(base_family = "Arial", base_size = 12) +
  theme(plot.title = element_text(hjust = 0.5, face = "bold", size = 16),
        plot.subtitle = element_text(hjust = 0.5, size = 14),
        legend.position = "right",
        legend.title = element_text(face = "bold"),
        axis.title = element_text(face = "bold"))  +
  facet_wrap(~origin)